package com.mark.web.data.mapper;

import com.mark.web.data.entity.po.Product;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 商品dao接口，用于商品的数据库操作
 * @Author: Mark
 * @CreateDate: 2018/9/21
 * @Version: 2.0
 * @Copyright : 豆浆油条个人非正式工作室
 */
@Mapper
public interface ProductMapper {

    int insert(Product record);

    int insertSelective(Product record);

    int deleteByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Product record);

    int updateByPrimaryKey(Product record);

    Product selectByPrimaryKey(Integer id);

    /**
     *分页查询所有的商品
     * @param ownerId：店家id
     * @return ; 商品列表
     */
    List<Product> selectList(@Param("ownerId") Integer ownerId);

    /**
     * 根据商品的商品名称，商品Id组合查询,状态
     * @param ownerId：店家id
     * @param productName：商品的名称
     * @param productId：商品id
     * @param enableStatus：商品的状态
     * @return ：商品列表信息
     */
    List<Product> searchProducts(@Param("ownerId") Integer ownerId,
                                 @Param("productName") String productName,
                                 @Param("productId") Integer productId,
                                 @Param("enableStatus") Integer enableStatus);


    /**
     *根据商品名称，拥有者的Id，商品种类的ID 查找在线的商品
     * @param productName：商品名称
     * @param categoryIdList：商品种类列表
     * @param ownerId：店家id
     * @return ：商品列表信息
     */
    List<Product> selectByNameAndCategoryIds(@Param("productName") String productName,
                                             @Param("categoryIdList") List<Integer> categoryIdList,
                                             @Param("ownerId") Integer ownerId);

    /**
     *根据商品的id，商品的拥有者id查找统计商品的数量
     * @param enableStatus：商品状态
     * @param ownerId：店家id
     * @return ：对应状态下的商品的数量
     */
    int selectCountByStatus(@Param("enableStatus") Integer enableStatus,
                            @Param("ownerId") Integer ownerId);

    /**
     *根据商品id返回库存
     * @param productId ：商品id
     * @return ：商品库存
     */
    Integer selectStockByProductId(@Param("productId") Integer productId);
}